Kubeflow 와 Karpenter 를 활용한 엔터프라이즈급 k8s LLMOps 구축하기
개요
AI에서 LLMOps(대규모 언어 모델 운영)는 모델의 개발, 배포, 모니터링, 유지보수를 체계적으로 관리하기 위해 필수적입니다.
특히, 엔터프라이즈 환경에서는 모델의 신뢰성, 확장성, 보안이 중요합니다. CNCF 오픈소스를 활용하는 이유는 커뮤니티의 지원과 지속적인 업데이트, 그리고 비용 효율성 때문입니다.
엔터프라이즈에서 LLMOps 를 구축하기 위한 요구사항으로는 데이터 보안, 확장성, 자동화된 워크플로우, 실시간 모니터링 및 피드백 루프가 있습니다. Kubeflow 는 이러한 요구사항을 충족시키는 데 탁월합니다. Kubeflow 는 머신러닝 워크플로우를 자동화하고, 다양한 ML 프레임워크와의 호환성을 제공하며, 확장 가능한 인프라를 지원합니다. Karpenter 는 클러스터의 자원 관리를 최적화하여 비용을 절감하고, 자동으로 노드를 추가하거나 제거하여 클러스터의 효율성을 극대화합니다. 이를 통해 엔터프라이즈 환경에서의 자원 활용도를 높일 수 있습니다. 데모에서는 Kubeflow 를 사용하여 모델을 훈련하고, Karpenter 를 통해 자원을 동적으로 관리하는 과정을 보여줍니다. 예를 들어, 대규모 데이터셋을 사용한 모델 훈련 시 Karpenter 가 자동으로 필요한 자원을 할당하고, 훈련이 끝나면 자원을 해제하는 모습을 시연할 수 있습니다. 이를 통해 엔터프라이즈 환경에서의 LLMOps 구축이 얼마나 효율적이고 유연한지 확인할 수 있습니다.
발표
통신사에서 엔터용 LLMOps를 구축하기 위해, 겪었던 이슈들
kubeflow
MLops 관리 툴
거의 cncf 내의 ai 관련 최고 에코시스템
- pipleline
- 도커 내에 이식하여 만든 머신러닝 워크플로우
- 워크플로우 하나가 컨테이너가 되는 듯?
- notebook
- 그냥 노트북임 ㅋ
- 파드 안에서 실행됨
- statefulset으로 괸리된다고 함
- training operator
- katlib
- kserve
- 고가용성을 고려한 서빙 가능
- mpi operator
- artifacts
- central dashboard
- rbac 기반으로 웹 대시 보드
- 다양한 관리 가능
- automl
- 하파 튜닝, 아키텍처 검색 기능 등의 ml 도와주는 툴
- model training
- 파인 튜닝을 위한 통합 인터페이스
- 파이 토치 등의 인기 있는 프레임워크를 위한 확장 가능한 sdk.
- 분산 훈련 작업까지 실행해줌
각각의 독립된 프로젝트들의 존재한다.
여기에 istio, cert manager, minio, argo 등도 활용된다.
그래서 이중에 일부만 적용하는 것도 가능하다.
cert manager는 인증 관련 키 관리 자동화.
minio는 오브젝트 스토리지를 추상화하여 제공해줌
아무튼 이렇게 많은 컴포넌트가 존재한다.
애저에서 이들을 전부 통합관리하여 아키텍처를 구성
이때 gpu 가격이 비싸기 때문에 카펜터를 활용함
이걸 llmops에도 활용할 수 있지 않겠냐 하며 시도된 것.
아키텍처링 여정
몇 가지 있었던 이슈, 고민 지점들
기업내에서 겪게 될 것
카펜터
클러스터 오토스케일러란 오픈소스로 노드 관리가 가능하긴 하다.
- 반영 속도가 상대적으로 느린 편이다.
- 클러스터 외부의 자원에 의존해야 함
- 노드 풀 구성 시 다양성이 없다.
- a100, h100 이런 거 한꺼번에 쓰고 싶은데 안 됨
이런 게 불편함
그래서 클라우드 네이티브하게 설정이 가능하길 바랐다.
클러스터 내부 api를 통해 관리할 수 있도록 하는 것.
빠른 프로비저닝 가능해야 함
그래서 카펜터를 썼다.
특징
- 빠른 확장 축소
- pub, sub 방식이라 부족 상태를 빠르게 파악.
- 특히 디프로비저닝이 매우 빠름
- 비용 효율성
- 가장 저렴한 인스턴스를 써서 비용 절감
- 유연한 리소스 관리
- 사용자 설정에 따라 노드 사양 지정.
- 다양한 환경 지원
- 모든 csp, 온프렘에서 활용 가능
- 고성능
- 클러스터 컴퓨팅 리소스 최적화하여 앱 가용성과 효율성 개선
사용법
노트풀, 노드 클래스란 양식만 관리하면 됨
지정만 해두면 또 선언 방식으로 따라감
toleration preset 이라는 걸 제공할 수 있음
특정 sku 용
사용자가 바라는 gpu만 딱 프로비저닝 바당서 사용할 수 있도록 할 수 있다는 것.
gpu에대해서만 설정했다.
kubeflow 앱 자체에는 기존 오토스케일러를 활용함
엔비디아 gpu
요건 중 하나는 엔비디아를 사용해야 한다는 것.
그러려면 드라이버를 사용해야 함
세가지 옵션이 있었다.
- aks gpu image
- 그냥 드라이버 다 박힌 이미지
- 불필요한 리소스, 버전도 너무 낮음
- nvidia device plugin
- 플러그인 설치
- 데몬셋으로 돌아감
- 딱 플러그인만 있어서 아쉬움
- nvidia gpu operator
- 헬름 오퍼레이터
- nvidia cdi 도 들어감
- 컨테이너 관리나, 타임슬라이싱 기능도 탑재됨
3번째 옵션 선택
piplline 최적화
아티팩트 저장소를 어떻게 할 것인가.
모델은 중간 결과물일 수도, 최종 일수도 있따.
근데 얘네는 빠를 필요는 없는데 크기가 크다.
그래서 비용 효율적인 녀석을 선택해야 함
그래서 minio 사용
게이트웨이를 통해 어디에서든 오브젝트 스토리지를 제공함
근데 이건 현재 플젝이 중단됐다고 함
이에 대한 대안으로 blobfuse2를 사용함
다른 오브젝트 스토리지를 노드에 디스크로 붙일 수 있게 하는 오픈소스
kubeflow auth
인증이 이미 잘 돼있음
dex라는 것이 사용됨
근데 이미 서비스 중인 녀석과 연계하려니 조금 어려웠다.
그래서 oidc로 외부 idp 연동
dex를 제거하고 직접 idp를 등록한 것.
토큰이 만료되면 auth service를 통해 프로바이더에게 갱신 받아서 사용하는 방식.
네트워크 격리
내부, 외부 격리 아키텍쳐 설계
처음에는 허브 스포크 방식
내부 망 사용자는 상관 없었다.
그냥 쓰면 됏으니까.
근데 공유오피스를 많이 사용하는 고객사라 외부 접속도 필요했음
mfas나 특정 ip만 가능하도록 하는 설정을 할 수 있는 도구가 필요했음
인증서 관리
cert manager
인증서의 풀 라이프사이클로 관리할 수 있음
이건 클러스터 내부에서 관리하는 방식임
근데 이렇게 하면 외부 사용자의 인증서를 어떻게 하냐.
그래서 애저의 기능을 사용하는 것으로 바꿈
네트워크 격리 보안 요건 땜시 l7 보안 기가 생김에 따라 쩔 수 없었다.
이미지 캐싱
kuda 사용하거나 그러면 컨테이너 이미지?
그냥 커져버린다.
그래서 캐싱이 잘 돼야 함
harbor, kubefledged, artifact streaming
다양하게 사용함
근데 썩 잘 되지는 않았다.
애저에 사용할 노드를 미리 등록하느 ㄴ기능이 잇음
그래서 여기에 이미지를 프리로딩해서 카펜터의 노드로 활용할 수 잇는 기능이 곧 제공될 예정
그래서 이제 로컬 캐싱된 것 마냥 이미지를 사용할 수 잇을 예정
프리로딩된 노드르를 활용할 때 추가적으로 비용이 발생하는 부부닝 잇을 것으로 생각하는데 어떤가
소감
인테그레이션할 수 있게 잘 돼있고, 이미 잘 만들어진 놈들 잘만 고르면 돼서 좋았음
이식성도 좋게 구성했음
근데 사실 csp에서 무료로 제공하는 기능들이 긴 함.
리소스 비용만 내고.
대신 이식성이 좋으니.. 개꿀
후기
실제로 어떻게 했는지 코드도 공개돼 있어 엄청난 참고가 될 것 같다.
이식성이 좋다는 것만으로도 나는 충분히 좋은 도전이었다고 생각한다.
엔지니어로서 할 수 있는 가장 신나는 일 아닌가.